import type { AnyValueLabelObject, ValueLabelObject } from "@/types";
import { dayjs } from "element-plus";

/**
 * 格式化时间为年月日时分秒
 * @param datetime 不同格式的时间
 * @returns YYYY-MM-DD HH:mm:ss
 */
export function formatDateTime(datetime: string) {
  if (datetime === null) {
    return "";
  }
  return dayjs(datetime).format("YYYY-MM-DD HH:mm:ss");
}

/**
 * 把普通的对象数组转换为value label格式的对象数组
 * @param arr 任意对象数组
 * @param option label value字段配置
 * @returns 
 */
export function format2ValueLableList(
  arr: object[],
  option: { label: string; value: string }
): ValueLabelObject[] {
  const { label, value } = option;
  const result = [];
  arr.forEach((item) => {
    result.push({
      label: item[label],
      value: item[value],
    });
  });
  return result;
}

/**
 * 根据value找label的辅助函数
 * @param list 列表
 * @param value 值value
 * @returns label
 */
export function findLabelByValue(list: AnyValueLabelObject[], value: any) {
  const target = list.find((item) => item.value === value);
  if (target) {
    return target.label;
  }
  return "";
}

/**
 * 根据values找labels的辅助函数
 * @param list 列表
 * @param values 值value数组
 * @returns label数组
 */
export function findLabelsByValues(list: AnyValueLabelObject[], values: any[]) {
  const result: any[] = [];
  values.forEach((v) => {
    const target = list.find((item) => item.value === v);
    if (target) {
      result.push(target.label);
    }
  });
  return result;
};
// 金额转大写
export function capitalAmount(amount: any) {
	// 汉字的数字
	const cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
	// 基本单位
	const cnIntRadice = ["", "拾", "佰", "仟"];
	// 对应整数部分扩展单位
	const cnIntUnits = ["", "万", "亿", "兆"];
	// 对应小数部分单位
	const cnDecUnits = ["角", "分", "毫", "厘"];
	// 整数金额时后面跟的字符
	const cnInteger = "整";
	// 整型完以后的单位
	const cnIntLast = "元";
	// 最大处理的数字
	const maxNum = 9999999999999999.99;
	// 金额整数部分
	let integerNum;
	// 金额小数部分
	let decimalNum;
	// 输出的中文金额字符串
	let chineseStr = "";
	// 分离金额后用的数组，预定义
	let parts;
	if (amount === "") { return ""; }
	amount = parseFloat(amount);
	if (amount >= maxNum) {
		// 超出最大处理数字
		return "";
	}
	if (amount === 0) {
		chineseStr = cnNums[0] + cnIntLast + cnInteger;
		return chineseStr;
	}
	// 转换为字符串
	amount = amount.toString();
	if (amount.indexOf(".") === -1) {
		integerNum = amount;
		decimalNum = "";
	} else {
		parts = amount.split(".");
		integerNum = parts[0];
		decimalNum = parts[1].substr(0, 4);
	}
	// 获取整型部分转换
	if (parseInt(integerNum, 10) > 0) {
		let zeroCount = 0;
		const IntLen = integerNum.length;
		for (let i = 0; i < IntLen; i++) {
			const n = integerNum.substr(i, 1);
			const p = IntLen - i - 1;
			const q = p / 4;
			const m = p % 4;
			if (n === "0") {
				zeroCount++;
			} else {
				if (zeroCount > 0) {
					chineseStr += cnNums[0];
				}
				// 归零
				zeroCount = 0;
				chineseStr += cnNums[parseInt(n, 10)] + cnIntRadice[m];
			}
			if (m === 0 && zeroCount < 4) {
				chineseStr += cnIntUnits[q];
			}
		}
		chineseStr += cnIntLast;
	}
	// 小数部分
	if (decimalNum !== "") {
		const decLen = decimalNum.length;
		for (let i = 0; i < decLen; i++) {
			const n = decimalNum.substr(i, 1);
			if (n !== "0") {
				chineseStr += cnNums[Number(n)] + cnDecUnits[i];
			}
		}
	}
	if (chineseStr === "") {
		chineseStr += cnNums[0] + cnIntLast + cnInteger;
	} else if (decimalNum === "") {
		chineseStr += cnInteger;
	}
	return chineseStr;
}
export function dateFormat   (optime:string) {
	let time = new Date(optime)
   var Y = time.getFullYear();
var M = (time.getMonth() + 1 < 10 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1);
var D = (time.getDate() < 10 ? '0' + time.getDate() : time.getDate());
var h = (time.getHours() < 10 ? '0' + time.getHours() : time.getHours());
var m = (time.getMinutes() < 10 ? '0' + time.getMinutes() : time.getMinutes());
var s = (time.getSeconds() < 10 ? '0' + time.getSeconds() : time.getSeconds());

   return `${Y}/${M}/${D} ${h}:${m}:${s}`
}